package com.sanploy.manage.service;

import com.sanploy.common.domain.dto.OrderSort;
import com.sanploy.common.domain.vo.OrderListVo;
import com.sanploy.common.domain.vo.Page;
import com.sanploy.common.enums.OrderStatus;
import com.sanploy.common.vo.BaseException;

import java.util.List;

/**
 * @author Created by zhu yingzhi on 2017/10/11.
 * @author yingzhi zhu
 * 订单逻辑处理接口
 */
public interface OrderService {
    /**
     * 查找所有的订单
     * @param orderSort 订单的排序规则
     * @return OrderListVo实体 分页
     */
    Page<OrderListVo> findAllOrder(OrderSort orderSort);

    /**
     * 发货
     * @param orderId 订单号
     * @param transportNumber 运费单号
     * @return 是否成功
     * @throws BaseException 自定义异常
     */
    int deliverGoods(String orderId, String[] transportNumber) throws Exception;

    /**
     * 通过OrderId 查找订单
     * @param orderId 订单id
     * @return 订单实体对象
     * @throws BaseException 自定义异常
     */
    OrderListVo findByOrderId(String orderId) throws BaseException;

    /**
     * 批量改变某个订单的状态
     * @param list 订单列表
     * @param status 改变后的状态
     * @param beforeStatus 改变前的状态
     * @param endTime 在这时间之前的订单都要改变
     * @return 是否成功
     * @throws BaseException 自定义异常
     */
    int autoChangeOrdersStatus(List<String> list, OrderStatus status, OrderStatus beforeStatus, String endTime) throws BaseException;

    /**
     * 改变某个订单的状态
     * @param orderId 订单号
     * @param status 改变后的状态
     * @param beforeStatus 改变前的状态
     * @param endTime 在这时间之前的订单都要改变
     * @return 是否成功
     */
    int autoChangeOrdersStatus(String orderId, OrderStatus status, OrderStatus beforeStatus, String endTime);

    /**
     * 改变某个用户的订单状态
     * @param userId 用户id
     * @param status 改变后的状态
     * @param beforeStatus 改变前的状态
     * @param endTime 在这时间之前的订单都要改变
     * @return 是否成功
     */
    int changeUserOrdersStatus(Long userId, OrderStatus status, OrderStatus beforeStatus, String endTime);

    /**
     * 根据状态查找某个用户的订单
     * @param userId 用户id
     * @param status 状态码
     * @return 订单号集合
     */
    List<String> findUserOrdersByStatus(Long userId, OrderStatus status);

    /**
     * 根据状态查找的订单
     * @param status 状态码
     * @return 订单号集合
     */
    List<String> findOrdersByStatus(OrderStatus status);

//    int autoConfirmOrdersBat(List<String> list, OrderStatus status,OrderStatus beforeStatus) throws BaseException;
//    int autoConfirmOrders(String order_id, OrderStatus status,OrderStatus beforeStatus);
//    int confirmUserOrders(Long user_id, OrderStatus status,OrderStatus beforeStatus);
//    List<String> findconfirmUserOrders(Long user_id, OrderStatus status,OrderStatus beforeStatus);
}
